package com.xtm.exercise.base.A03Arrays;

import org.junit.Test;

import java.util.Arrays;

public class SortDemo {

    /**
     * 请简述冒泡排序原理
     *      冒泡排序的思想就是将相邻的两个位置的数据进行比较,如果前面位置的数据大于后面位置的数据,则将两位置的数据进行交换,
     *      未排序元素中最大的数便会像一个气泡一样一路向后冒,最后会将其放在未排序数据的末尾.使其成为已排序数据的首位。
     *
     * 冒泡排序  数组元素 {13,46,22,65,3}
     * 冒泡排序：相邻元素，依次比较，大的往后放
     */
    @Test
    public void test01(){
        int[] arr = { 55, 44, 22, 33, 11 };
        for (int j = 0; j < arr.length - 1; j++) {// 外循环就是轮数
            for (int i = 0; i < arr.length - 1 - j; i++) {// -1为了防止越界，-j提高效率
                // arr[i] 与arr[i+1]
                if (arr[i] > arr[i + 1]) {
                    // 互换
                    int temp = arr[i];
                    arr[i] = arr[i + 1];
                    arr[i + 1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }

    /**
     * 选择排序  数组元素 {13,46,22,65,3}
     * 	选择排序：选择最小的，逐个比较，最小的往前放
     */
    @Test
    public void test02(){
        int[] arr = { 55, 44, 22, 33, 11 };
        for (int j = 0; j < arr.length; j++) {
            for (int i = j; i < arr.length - 1; i++) {
                // 逐个比较
                if (arr[j] > arr[i + 1]) {
                    // 互换
                    int temp = arr[j];
                    arr[j] = arr[i + 1];
                    arr[i + 1] = temp;
                }
            }
        }
        System.out.println(Arrays.toString(arr));
    }

    /**
     * 二分查找
     */

}
